<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
        // 1.函数声明
        function f1(){
            console.log("f1函数");
        }

        // 2.函数表达式
        var f2=function(){
            console.log("f2函数");
        };


        // ES6中新增了第三种函数定义方式
        // 箭头函数:使用=>进行定义，本身是一个匿名函数
        // 箭头函数只能使用表达式的方式进行定义

        //定义一个无参的箭头函数
        let f3=()=>{
            console.log("我是函数f3");
        };
        f3();
        function f4(a){
            console.log("传入的参数是:"+a);
        }
        f4("哈哈哈");

        let f44=(a)=>{
            console.log("传入的参数是:"+a);
        };
        f44("嘻嘻嘻");

        //如果函数定义的时候，有且只有一个参数时，可以直接将箭头函数的形参括号省略
        
        let f55 = a => {
            console.log("传入的参数是:"+a);
        };

        //如果函数有且仅有一行返回值代码，可以省略箭头函数函数体的{}和return
        let f66= a => {
            return a;
        };
        let f77 = a => a;
        console.log(f77(100));

        //如果函数有且仅有一行代码，但是没有返回值，通过定义void关键字进行函数简化
        // void描述该函数没有返回值
        function f5(){
            console.log("helloWorld");
        }
        let f6=()=>{
            console.log("helloWorld");
        };
        f6();
        let f7 = () => void console.log("HelloWorld2");//标准语法
        f7();
        let f8 = () => console.log("HelloWorld3");//非标准语法
        f8();

        //如果函数中有且仅有一行代码，且需要返回一个对象数据
        function fun(){
            return {"name":"alice","age":30};
        }
        // let f9= () => {"name":"alice","age":30};//报错
        let f9= () => ({"name":"alice","age":30});//需要使用()进行括起来，表示{}为对象
        console.log(f9());

    </script>
</head>
<body>
    
</body>
</html>